<template>
  <div>
    <!-- 行内表单 inline为true -->
    <el-form :disabled="disabled" :inline="true" class="demo-form-inline">
      <el-form-item label="一级分类">
        <el-select v-model="category1Id" placeholder="请选择" @change="handleCategory1">
          <!-- 对于下拉框而言 收集的是选中给到option的value值 option的value值通常是id值(value是什么 取决于你之后要收集什么数据 收集数据取决于你回头用什么数据 要获取三个分类选中的id值 发送请求获取属性列表) -->
          <el-option :label="c1.name" :value="c1.id" v-for="c1 in category1List" :key="c1.id" />
        </el-select>
      </el-form-item>

      <el-form-item label="二级分类">
        <!-- 下拉框收集的是选中option的value -->
        <el-select v-model="category2Id" placeholder="请选择" @change="handleCategory2">
          <!-- el-option下拉框中的列表项  label列表项的文本内容 value列表项的值-->
          <el-option :label="c2.name" :value="c2.id" v-for="c2 in category2List" :key="c2.id" />
        </el-select>
      </el-form-item>

      <el-form-item label="三级分类">
        <el-select v-model="category3Id" placeholder="请选择">
          <el-option :label="c3.name" :value="c3.id" v-for="c3 in category3List" :key="c3.id" />
        </el-select>
      </el-form-item>
    </el-form>
  </div>
</template>

<script lang="ts">
import { defineComponent } from "vue"
export default defineComponent({
  name: 'CategorySelector',
})
</script>

<script lang="ts" setup>
import { onMounted } from 'vue'
import { useCategoryStore } from '@/stores/category'
import { storeToRefs } from 'pinia'
const categoryStore = useCategoryStore()
const props = defineProps<{
  disabled:boolean
}>()
// 解构对应数据
const { category1List, category1Id, category2List, category2Id, category3List, category3Id } = storeToRefs(categoryStore)
onMounted(() => {
  // 发送请求获取一级分类列表
  categoryStore.getCategory1List()
})
// 选中(变化)一级分类就会执行的回调函数 请求二级分类的列表
function handleCategory1(category1Id: number) { //默认传递最新的选中的一级分类id
  categoryStore.getCategory2List(category1Id)
}
// 选中(变化)二级分类就会执行的回调函数 请求三级分类的列表
function handleCategory2(category2Id: number) { //默认传递最新的选中的二级分类id
  categoryStore.getCategory3List(category2Id)
}
</script>

<style scoped></style>